home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 209_01 / sys1calr.mac < prev   
Text File  |  1990-03-03  |  1KB  |  50 lines

  1. TITLE SYS1CALR.MAC  VERS:- 01.00  DATE:- 09/26/86  TIME:- 09:39:42 PM
  2. ;*
  3. ;* Description: 
  4. ;*     call to address given as the parameter, such as a system address
  5. ;*        outside the C program.
  6. ;*     Usage:        .
  7. ;*            .
  8. ;*        C program code
  9. ;*            .
  10. ;*        sys1call(address to call)    eg, address = TINIT for
  11. ;*            .                    SYSIO load
  12. ;*            .
  13. ;*
  14. ;*
  15. ;*     To compile:
  16. ;*           m80  sys1calr/r
  17. ;*
  18. ;* By J.A. Rupley, Tucson, Arizona
  19. ;* Standard z80 code
  20. ;*
  21.  
  22. bdos    equ    5
  23.  
  24.     .z80
  25.  
  26. sys1call::        ;IMPORTANT-- declare entry point with "::"
  27.  
  28.     add    hl,sp    ;carry out administrative function for eco C
  29.     push    hl    ;ie, put OLD stack address below return address
  30.             ;note: hl = offset from current sp to old sp
  31.             ;  parameter space, etc is taken into account
  32.  
  33.     ld    ix,4    ;set index register to parameter address
  34.     add    ix,sp
  35.  
  36.     ld    l,(ix+0)    ;move address from parm to hl reg
  37.     ld    h,(ix+1)
  38.  
  39.     ld    (calladdr),hl    ;stuff call address into proper place
  40.  
  41.     ld    c,9        ;setup for print of string$ -- not used except
  42.     ld    de,string    ;  when address = BDOS, as test
  43.     call    0000        ;default is warm boot
  44. calladdr    equ    $-2
  45.  
  46.     jp    $RTNV##    ;return to C
  47.  
  48. string:    db    0dh,0ah,0dh,0ah,"executing call from sys1call()",0dh,0ah,0dh,0ah,"$"
  49.     end
  50.